﻿/*  
Copyright Microsoft Corporation

Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at 

http://www.apache.org/licenses/LICENSE-2.0 

THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
MERCHANTABLITY OR NON-INFRINGEMENT. 

See the Apache 2 License for the specific language governing permissions and
limitations under the License. */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MileageStats.Web.Infrastructure
{
    /// <summary>
    /// This custom controller factory injects the CookieTempDataProvider automatically for
    /// any instanciated controller.
    /// </summary>
    public class CustomControllerFactory : DefaultControllerFactory
    {
        /// <summary> 
        /// <para>Get instance of the controller</para> 
        /// </summary> 
        protected override IController GetControllerInstance(
                RequestContext requestContext, Type controllerType)
        {
            var controller = base.GetControllerInstance(requestContext, controllerType);

            if (controller != null
                    && typeof(Controller).IsAssignableFrom(controller.GetType()))
            {
                // ITempDataProvider 
                var tempDataProvider = new CookieTempDataProvider(requestContext.HttpContext);
                ((Controller)controller).TempDataProvider = tempDataProvider;
            }

            return controller;
        }
    } 

}